#include <stdio.h>
#include <string.h>
int n = 0, num = 0; // 学生人数  搜索学号
struct student
{
    int id;
    float chinese_s;
    float math_s;
    float english_s;
    float avg;
} st[100];  // 学生结构体
void help() // 帮助菜单
{
    printf("*******************************************\n");
    printf("   *   学生成绩管理系统———帮助菜单     *  \n");
    printf("*******************************************\n");
    printf("   *      H = 显示帮助菜单             *  \n");
    printf("   *      T = 成绩录入                 *  \n");
    printf("   *      A = 计算学生平均分           *  \n");
    printf("   *      L = 列出成绩表               *  \n");
    printf("   *      P = 按成绩由高到低排序       *  \n");
    printf("   *      S = 按学号查询学生成绩       *  \n");
    printf("   *      C = 清屏                     *  \n");
    printf("   *      Q = 退出系统                 *  \n");
    printf("*******************************************\n");
    printf("   * Copyright <C> 2023.03.20 By 101.6 *\n");
}

void Type() // 录入学生人数
{
    printf("请输入学生人数：");
    scanf("%d", &n);
    printf("请输入%d名学生的三门课成绩：\n", n);
    printf("学号\t语文\t数学\t外语\n");
    for (int i = 0; i < n; i++)
    {
        printf("%d\t", i + 1);
        st[i].id = i + 1;
        scanf("%f %f %f", &st[i].chinese_s, &st[i].math_s, &st[i].english_s);
        st[i].avg = 0.0; // 初始化平均分
    }
}

void List() // 查看成绩菜单
{
    printf("学生成绩如下：\n");
    printf("学号\t语文\t数学\t外语\t平均分\n");
    for (int i = 0; i < n; i++)
    {
        if (st[i].id != 0)
            printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n", st[i].id, st[i].chinese_s, st[i].math_s, st[i].english_s, st[i].avg);
        else
            printf("");
    }
}

void avg() // 计算平均值
{
    for (int i = 0; i < n; i++)
        st[i].avg = (st[i].chinese_s + st[i].math_s + st[i].english_s) / 3.0;
    printf("平均分已计算。请使用L命令查看");
}

void Sort() // 按平均值对学生成绩排序
{
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (st[j].avg < st[j + 1].avg)
            {
                struct student temp = st[j];
                st[j] = st[j + 1];
                st[j + 1] = temp;
            }
        }
    }
    printf("完成排序，请使用L命令查看");
}
int Search() // 根据学号搜索学生成绩
{
    printf("请输入要查询的学号：");
    scanf("%d", &num);
    for (int i = 0; i < n; i++)
    {
        if (st[i].id != 0)
        {
            if (st[i].id == num) // 如果输入学号与id匹配，打印成绩
            {
                printf("学号\t语文\t数学\t外语\t平均分\n");
                printf("%d\t%.1f\t%.1f\t%.1f\t%.1f", st[i].id, st[i].chinese_s, st[i].math_s, st[i].english_s, st[i].avg);
                return 0;
            }
        }
    }
    if (num < 1 || num > n) //输入学号小于1或大于学生人数，返回1
        return 1;
    return 1;
}

void change()
{
    printf("请输入要更改的学号：");
    scanf("%d", &num);
    int index = -1;
    for (int i = 0; i < n; i++)
    {
        if (st[i].id == num)
        {
            index = i;
            break;
        }
    }
    if (index != -1) // 判断学号是否存在
    {
        printf("请重新输入成绩：\n");
        printf("学号\t语文\t数学\t外语\n");
        printf("%d\t", num);
        scanf("%f %f %f", &st[index].chinese_s, &st[index].math_s, &st[index].english_s);
        st[index].avg = (st[index].chinese_s + st[index].math_s + st[index].english_s) / 3.0; // 计算更改成绩后的平均值
        printf("成绩已更改,请使用L命令查看");
    }
    else
        printf("学号不存在");
}

void Delete()
{
    printf("请输入要删除成绩的学号：");
    scanf("%d", &num);

    for (int i = 0; i < n; i++)
    {
        if (num == st[i].id)
        {
            st[i].id = 0;
            printf("成绩已删除，请使用L命令查看");
            return;
        }
    }
    printf("学号不存在");
}